package cn.oppexecise;

/**
 * @author SWJ
 * @create 2021-06-08 20:02
 * 本类用来测试代码块之间的关系
 */
public class OppExecise {
    public static void main(String[] args) {
        /**在创建对象之前，会自动执行静态代码块
         * 静态代码块只会执行1次
         * 每一次创建对象时，都会调用构造代码块，构造代码块先执行*/
        Persion p = new Persion();
        p.Persion();
        p.sleep();
        Persion p2=new Persion();
        /**方法里有局部代码块，局部代码块才会被触发*/

    }
}

//我是静态代码块
//我是构造代码块
//构造方法
//普通方法
//局部代码块

class Persion {
    /**静态代码块 --> 构造代码块 --> 构造方法 --> 局部代码块
     * 创建静态代码块
     * 位置：类里方法外
     * 触发时机：静态代码块也是静态资源
     * 随着类的加载而加载，优先对于对象加载
     * 作用用于完成一些第一时间加载的资源 */
    static {
        System.out.println("我是静态代码块");
    }

    /**创建构造代码块
     *位置：类里方法外
     * 触发时机：创建对象时触发，而且要优先与构造方法执行
     * 作用：提取所有构造方法的共性功能
     * */ {
        System.out.println("我是构造代码块");
    }

    /**
     * 创建构造方法
     */
    public void Persion() {
        System.out.println("构造方法");
    }

    public void sleep() {
        System.out.println("普通方法");
/**局部代码块*/
        {
            System.out.println("局部代码块");
        }
    }

}
